#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Generic;
using Cephei.QL.Termstructures;
using Cephei.QL;
using Cephei.QL.Math;
using Cephei.QL.Models;
using Cephei.QL.Math.Optimization;
namespace Cephei.QL.Models.Shortrate.Onefactormodels
{
     // <summary> 
	// ! This class implements the standard single-factor Hull-White model defined by \f[ dr_t = (\theta(t) - \alpha r_t)dt + \sigma dW_t \f] where \f$ \alpha \f$ and \f$ \sigma \f$ are constants.  \test calibration results are tested against cached values  \bug When the term structure is relinked, the r0 parameter of the underlying Vasicek model is not updated.  \ingroup shortrate
	// </summary>
    [Guid ("F25075D4-0B60-4f08-85D6-4213BF92426F"),ComVisible(true)]
	public interface IHullWhite : Cephei.QL.Models.Shortrate.Onefactormodels.IVasicek, Cephei.QL.Models.ITermStructureConsistentModel
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        
		 Double ConvexityBias(Double futurePrice, Double t, Double T2, Double sigma, Double a);
        
		 Double DiscountBondOption(QL.Option.TypeEnum type, Double strike, Double maturity, Double bondMaturity);
        
		 Cephei.QL.ILattice Tree(Cephei.QL.ITimeGrid grid);
    }

    // <summary> 
	// ! This class implements the standard single-factor Hull-White model defined by \f[ dr_t = (\theta(t) - \alpha r_t)dt + \sigma dW_t \f] where \f$ \alpha \f$ and \f$ \sigma \f$ are constants.  \test calibration results are tested against cached values  \bug When the term structure is relinked, the r0 parameter of the underlying Vasicek model is not updated.  \ingroup shortrate Factory
	// </summary>
   	[ComVisible(true)]
    public interface IHullWhite_Factory // : Collection_Factory<IHullWhite, ICell<IHullWhite>>
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        
	    IHullWhite Create (Cephei.QL.Termstructures.IYieldTermStructure termStructure, Microsoft.FSharp.Core.FSharpOption<Double> a, Microsoft.FSharp.Core.FSharpOption<Double> sigma);
    }
}

